<html>

	<head>
		<title>3.9 render 系列方法</title>
		<meta charset="utf-8" />
		<meta name="author" content="jfinal,yaolin" />
		<meta name="Keywords" content="" />
		<link rel="stylesheet" type="text/css" href="../../css/global.css" />
	</head>

	<body>
		<h1>3.9 render 系列方法</h1>
		<p>render 系列方法将渲染不同类型的视图并返回给客户端。 JFinal 目前支持的视图类型有： JFinal Template、 FreeMarker、 JSP、 Velocity、 JSON、 File、 Text、 Html 等等。除了 JFinal 支持 的视图型以外， 还可以通过继承 Render 抽象类来无限扩展视图类型。</p>
		<p>通常情况下使用 Controller.render(String)方法来渲染视图， 使用 Controller.render(String)时 的 视 图 类 型 由 JFinalConfig.configConstant(Constants constants) 配 置 中 的 constants.setViewType(ViewType)来决定，该设置方法支持的 ViewType 有： JFINAL_TEMPLATE、 FreeMarker、 JSP、 Velocity，不进行配置时的缺省配置为 JFINAL_TEMPLATE。</p>
		<p>此外，还可以通过 constants.setRenderFactory(IRenderFactory)来设置 Controller 中所有 render 系列方法所使用的 Render 实现类。</p>
		<p>假 设 在 JFinalConfig.configRoute(Routes routes) 中 有 如 下 Controller 映 射 配 置 ： routes.add(“/user”, UserController.class, “/path”)， render(String view)使用例子：</p>
		<table border="1">
			<tr>
				<th>方法调用</th>
				<th>描述</th>
			</tr>
			<tr>
				<td>render(”test.html”)</td>
				<td>渲染名为 test.html 的视图，该视图的全路径 为”/path/test.html”
				</td>
			</tr>
			<tr>
				<td>render(”/other_path/test.html”)</td>
				<td>渲染名为 test.html 的视图，该视图的全路径 为”/other_path/test.html”，即当参数以”/”开头时将 采用绝对路径。
				</td>
			</tr>
		</table>
		<p>其它 render 方法使用例子：</p>
		<table border="1">
			<tr>
				<th>方法调用</th>
				<th>描述</th>
			</tr>
			<tr>
				<td>renderTemplate(”test.html”)</td>
				<td>渲染名为 test.html 的视图，且视图类型为 JFinal Template。
				</td>
			</tr>
			<tr>
				<td>renderFreeMarker(”test.html”)</td>
				<td>渲 染 名 为 test.html 的 视 图 ， 且 视 图 类 型 为 FreeMarker。
				</td>
			</tr>
			<tr>
				<td>renderJsp(”test.html”)</td>
				<td>渲染名为 test.html 的视图，且视图类型为 Jsp。</td>
			</tr>
			<tr>
				<td>renderVelocity(“test.html”)</td>
				<td>渲染名为 test.html 的视图，且视图类型为 Velocity。</td>
			</tr>
			<tr>
				<td>renderJson()</td>
				<td>将所有通过 Controller.setAttr(String, Object)设置 的变量转换成 json 数据并渲染。</td>
			</tr>
			<tr>
				<td>renderJson(“users”, userList)</td>
				<td>以”users”为根，仅将 userList 中的数据转换成 json 数据并渲染。
				</td>
			</tr>
			<tr>
				<td>renderJson(user)</td>
				<td>将 user 对象转换成 json 数据并渲染。</td>
			</tr>
			<tr>
				<td>renderJson(“{\”age\”:18}” )</td>
				<td>直接渲染 json 字符串。</td>
			</tr>
			<tr>
				<td>renderJson(new String[]{“user”, “blog”})</td>
				<td>仅将 setAttr(“user”, user)与 setAttr(“blog”, blog)设 置的属性转换成 json 并渲染。使用 setAttr 设置的 其它属性并不转换为 json</td>
			</tr>
			<tr>
				<td>renderFile(“test.zip”)</td>
				<td>渲染名为 test.zip 的文件，一般用于文件下载</td>
			</tr>
			<tr>
				<td>renderText(“Hello JFinal”)</td>
				<td>渲染纯文本内容”Hello JFinal”。</td>
			</tr>
			<tr>
				<td>renderHtml(“Hello Html”)</td>
				<td>渲染 Html 内容”Hello Html”。</td>
			</tr>
			<tr>
				<td>renderError (404 , “test.html”)</td>
				<td>渲染名为 test.html 的文件， 且状态为 404。</td>
			</tr>
			<tr>
				<td>renderError (500 , “test.html”)</td>
				<td>渲染名为 test.html 的文件，且状态为 500。</td>
			</tr>
			<tr>
				<td>renderNull()</td>
				<td>不渲染，即不向客户端返回数据。</td>
			</tr>
			<tr>
				<td>render(new XmlRender())</td>
				<td>使用自定义的 XmlRender 来渲染。</td>
			</tr>
		</table>
		<p class="red">注意：</p>
		<p class="red">1： IE 不支持 contentType 为 application/json,在 ajax 上传文件完成后返回 json 时 IE 提示下载文 件 , 解 决 办 法 是 使 用 ： render(new JsonRender().forIE()) 或 者 render(new JsonRender(params).forIE())。 这种情况只出现在 IE 浏览器 ajax 文件上传，其它普通 ajax 请求 不必理会。
		</p>
		<p class="red">2：除 renderError 方法以外，在调用 render 系列的方法后程序并不会立即返回，如果需要立即 返回需要使用 return 语句。 在一个 action 中多次调用 render 方法只有最后一次有效。</p>
	</body>

</html>